home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / sguru.s < prev    next >
Text File  |  1997-04-10  |  3KB  |  163 lines

  1. *    sguru.s
  2. *        小さなぐるぐる / 最高速 = 3
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    3
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16.     .text
  17.     .even
  18.  
  19.     .dc.b    'WL10',$0d,$0a
  20.     .dc.b    'ぐるぐる / 最高速 = 3',$0d,$0a
  21.     .dc.b    '    by Mitsuky',$0d,$0a
  22.     .dc.b    $1a
  23.     .even
  24.  
  25. sguru:
  26.     link    a6,#0
  27.     movem.l    d1-d7/a0-a5,-(sp)
  28.  
  29.     move.l    _speed(a6),d0
  30.     bmi    sguru_ask_speed
  31.     cmpi.l    #SPEED_MAX,d0
  32.     bhi    sguru_err
  33.  
  34.     tst.l    _vdisp(a6)
  35.     bmi    sguru_ask_vdisp
  36.  
  37.  
  38.     moveq.l    #SPEED_MAX,d3
  39.     sub.w    d0,d3    * d3.w = vdisp 待ち回数-1
  40.  
  41.     movea.l    _source_ptr(a6),a2    * a2.l = 転送元アドレス・その1
  42.     movea.l    _dest_ptr(a6),a3    * a3.l = 転送先アドレス・その1
  43.     lea.l    table(pc),a4        * a4.l = テーブル
  44.  
  45.     moveq.l    #64-1,d7    * d7.w = ループ回数-1
  46. sguru_loop:
  47.     move.w    d3,d0
  48. @@:    bsr    vdisp
  49.     dbra    d0,@b
  50.  
  51.     movea.l    a2,a0
  52.     movea.l    a3,a1
  53.  
  54.     moveq.l    #64-1,d5
  55. sguru_loop_y2:
  56.     moveq.l    #64/32-1,d4
  57. sguru_loop_x2:
  58.     move.w    (a0),(a1)
  59.     move.w    16*1(a0),16*1(a1)
  60.     move.w    16*2(a0),16*2(a1)
  61.     move.w    16*3(a0),16*3(a1)
  62.     move.w    16*4(a0),16*4(a1)
  63.     move.w    16*5(a0),16*5(a1)
  64.     move.w    16*6(a0),16*6(a1)
  65.     move.w    16*7(a0),16*7(a1)
  66.     move.w    16*8(a0),16*8(a1)
  67.     move.w    16*9(a0),16*9(a1)
  68.     move.w    16*10(a0),16*10(a1)
  69.     move.w    16*11(a0),16*11(a1)
  70.     move.w    16*12(a0),16*12(a1)
  71.     move.w    16*13(a0),16*13(a1)
  72.     move.w    16*14(a0),16*14(a1)
  73.     move.w    16*15(a0),16*15(a1)
  74.     move.w    16*16(a0),16*16(a1)
  75.     move.w    16*17(a0),16*17(a1)
  76.     move.w    16*18(a0),16*18(a1)
  77.     move.w    16*19(a0),16*19(a1)
  78.     move.w    16*20(a0),16*20(a1)
  79.     move.w    16*21(a0),16*21(a1)
  80.     move.w    16*22(a0),16*22(a1)
  81.     move.w    16*23(a0),16*23(a1)
  82.     move.w    16*24(a0),16*24(a1)
  83.     move.w    16*25(a0),16*25(a1)
  84.     move.w    16*26(a0),16*26(a1)
  85.     move.w    16*27(a0),16*27(a1)
  86.     move.w    16*28(a0),16*28(a1)
  87.     move.w    16*29(a0),16*29(a1)
  88.     move.w    16*30(a0),16*30(a1)
  89.     move.w    16*31(a0),16*31(a1)
  90.     lea.l    16*32(a0),a0
  91.     lea.l    16*32(a1),a1
  92.     dbra    d4,sguru_loop_x2
  93.  
  94.     lea.l    7*512*2(a0),a0
  95.     lea.l    7*512*2(a1),a1
  96.     dbra    d5,sguru_loop_y2
  97.  
  98.     adda.w    (a4),a2
  99.     adda.w    (a4)+,a3
  100.     dbra    d7,sguru_loop
  101.  
  102.     moveq.l    #0,d0
  103. sguru_rts:
  104.     movem.l    (sp)+,d1-d7/a0-a5
  105.     unlk    a6
  106.     rts
  107.  
  108.  
  109. ****    ****
  110. vdisp:
  111.     movem.l    a0,-(sp)
  112.     move.l    _vdisp(a6),a0
  113.     jsr    (a0)
  114.     movem.l    (sp)+,a0
  115.     rts
  116.  
  117.  
  118. ****    ****
  119. sguru_err:
  120.     moveq.l    #-1,d0
  121.     bra    sguru_rts
  122.  
  123.  
  124. ****    ****
  125. sguru_ask_speed:
  126.     moveq.l    #SPEED_MAX,d0
  127.     bra    sguru_rts
  128.  
  129.  
  130. ****    ****
  131. sguru_ask_vdisp:
  132.     move.l    _speed(a6),d0
  133.     lea.l    ask_vdisp_table(pc),a0
  134.     add.w    d0,d0
  135.     move.w    (a0,d0.w),d0
  136.     bra    sguru_rts
  137.  
  138. ask_vdisp_table:
  139.     .dc.w    256,192,128,64
  140.  
  141.  
  142. *********************************************************
  143. table:
  144.     .dc.w    2,2,2,2,2,2,2                * 7ドット右
  145.     .dc.w    1024,1024,1024,1024,1024,1024,1024    * 7ドット下
  146.     .dc.w    -2,-2,-2,-2,-2,-2,-2            * 7ドット左
  147.     .dc.w    -1024,-1024,-1024,-1024,-1024,-1024    * 6ドット下
  148.  
  149.     .dc.w    2,2,2,2,2,2                * 6ドット右
  150.     .dc.w    1024,1024,1024,1024,1024        * 5ドット下
  151.     .dc.w    -2,-2,-2,-2,-2                * 5ドット左
  152.     .dc.w    -1024,-1024,-1024,-1024            * 4ドット下
  153.  
  154.     .dc.w    2,2,2,2                    * 4ドット右
  155.     .dc.w    1024,1024,1024                * 3ドット下
  156.     .dc.w    -2,-2,-2                * 3ドット左
  157.     .dc.w    -1024,-1024                * 2ドット下
  158.  
  159.     .dc.w    2,2                    * 2ドット右
  160.     .dc.w    1024                    * 1ドット下
  161.     .dc.w    -2                    * 1ドット左
  162.  
  163.